﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcApplication1.Daten;
using MvcApplication1.Paging;

namespace MvcApplication1.Controllers
{
    public class BenutzerController : Controller
    {
        //
        // GET: /Benutzer/

        public ActionResult Index()
        {
            return View();
        }

        public ActionResult List()
        {
            // Liste der Benutzer abrufen
            var benutzer = Session["users"] as List<Benutzer>;

            // Standardwerte anlegen, wenn die Liste leer ist.
            if (benutzer == null)
            {
                // Liste anlegen
                benutzer = new List<Benutzer>();

                // Liste in der Session speichern
                Session["users"] = benutzer;

                // Werte hinzufügen
                benutzer.Add(new Benutzer() { Vorname = "Karsten", Nachname = "Samaschke", Email = "karsten@samaschke.de" });
                benutzer.Add(new Benutzer() { Vorname = "Tobias", Nachname = "Hauser", Email = "tobias@samaschke.de" });
                benutzer.Add(new Benutzer() { Vorname = "Jürgen", Nachname = "Kotz", Email = "juergen@samaschke.de" });
            }
            // Uhrzeit vermerken
            ViewData["Generiert"] = DateTime.Now.ToShortTimeString();

            //Liste der Benutzer als Rückgabe definieren
            return View(benutzer);
        }

        public ActionResult List2()
        {
            // Liste der Benutzer abrufen
            var benutzer = Session["users"] as List<Benutzer>;

            // Standardwerte anlegen, wenn die Liste leer ist.
            if (benutzer == null)
            {
                // Liste anlegen
                benutzer = new List<Benutzer>();

                // Liste in der Session speichern
                Session["users"] = benutzer;

                // Werte hinzufügen
                benutzer.Add(new Benutzer() { Vorname = "Karsten", Nachname = "Samaschke", Email = "karsten@samaschke.de" });
                benutzer.Add(new Benutzer() { Vorname = "Tobias", Nachname = "Hauser", Email = "tobias@samaschke.de" });
                benutzer.Add(new Benutzer() { Vorname = "Jürgen", Nachname = "Kotz", Email = "juergen@samaschke.de" });
            }
            // Uhrzeit vermerken
            ViewData["Generiert"] = DateTime.Now.ToShortTimeString();
            ViewData["nachnameList"] = from c in benutzer
                                        select c.Nachname;

            //Liste der Benutzer als Rückgabe definieren
            return View(benutzer);
        }

        public ActionResult ListDataGrid()
        {
            // Liste der Benutzer abrufen
            var benutzer = Session["users"] as List<Benutzer>;

            // Standardwerte anlegen, wenn die Liste leer ist.
            if (benutzer == null)
            {
                // Liste anlegen
                benutzer = new List<Benutzer>();

                // Liste in der Session speichern
                Session["users"] = benutzer;

                // Werte hinzufügen
                benutzer.Add(new Benutzer() { Vorname = "Karsten", Nachname = "Samaschke", Email = "karsten@samaschke.de" });
                benutzer.Add(new Benutzer() { Vorname = "Tobias", Nachname = "Hauser", Email = "tobias@samaschke.de" });
                benutzer.Add(new Benutzer() { Vorname = "Jürgen", Nachname = "Kotz", Email = "juergen@samaschke.de" });
            }
            // Uhrzeit vermerken
            ViewData["Generiert"] = DateTime.Now.ToShortTimeString();
            ViewData["users"] = benutzer; 
            Session["users"] = benutzer;

            //Liste der Benutzer als Rückgabe definieren
            return View(benutzer);
        }

        public ActionResult SortBenutzer(string sort)
        {
            IEnumerable<Benutzer> benutzern = Session["users"] as List<Benutzer>;
            sort = sort ?? string.Empty;
            switch (sort.ToLower())
            {
                case "nachname":
                    benutzern = from b in benutzern
                               orderby b.Nachname
                               select b;
                    break;
                case "vorname":
                    benutzern = from b in benutzern
                               orderby b.Vorname
                               select b;
                    break;
                default:
                    benutzern = from b in benutzern
                               orderby b.Email
                               select b;
                    break;
            }
            benutzern = benutzern.ToList();
            ViewData["users"] = benutzern;
            return View(benutzern);
        }

        //public ActionResult PagedBenutzern(int? page)
        //{
        //    IEnumerable<Benutzer> benutzern = Session["users"] as List<Benutzer>;
        //    var products = benutzern.OrderBy(p => p.Nachname).ToPagedList(page, 2);

        //    return View(products);
        //}

        public ActionResult AddObject(Benutzer benutzer)
        {
            // Übergebene Werte gültig?
            if (ModelState.IsValid)
            {
                // Liste der Benutzer abrufen
                var users = Session["users"] as List<Benutzer>;

                if (null == users)
                {
                    users = new List<Benutzer>();
                }

                users.Add(benutzer);
                Session["users"] = users;
                ViewData["istAngelegt"] = true;
                return View("List", users);
            }

            // keine Fehler, wenn die Seite initial aufgerufen wurde
            if (Request.HttpMethod == "GET")
            {
                ModelState.Clear();
            }

            benutzer = new Benutzer();
            return View(benutzer);
        }
    }
}
